package com.qdlc.p2p.biz.service;

import java.util.List;

import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.BorrowRepayment;
import com.qdlc.p2p.dal.dto.Operator;
import com.qdlc.p2p.dal.dto.User;
import com.qdlc.p2p.dal.model.BorrowModel;
import com.qdlc.p2p.dal.model.BorrowRepaymentModel;

/**
 * @author wuaj
 * @version 1.1.0.0
 * @since 2016年03月11日
 */
public interface BorrowRepaymentService {
    /**
     * 还款明细
     *
     * @param model
     * @return List<BorrowRepaymentModel>
     */
    PageDataList<BorrowRepaymentModel> list(BorrowRepaymentModel model, String searchName);

    /**
     * 前台还款明细
     *
     * @param model
     * @return List<BorrowRepaymentModel>
     */
    PageDataList<BorrowRepaymentModel> getList(BorrowRepaymentModel model);

    /**
     * 获取BorrowRepayment实体
     *
     * @param repay_id
     * @return BorrowRepayment
     */
    BorrowRepayment findById(long repay_id);

    /**
     * 根据用户ID获取还款总额
     *
     * @param userId 用户ID
     * @return 待还款总额
     */
    double getUserBorrowRepayTotal(long userId);

    /**
     * 逾期垫付
     *
     * @param borrowRepayment
     */
    public void overdue(BorrowRepayment borrowRepayment, Operator operator);

    /**
     * 还款统计
     *
     * @param userId 用户ID
     * @return 还款统计
     */
    BorrowRepaymentModel getReapyStatistics(long userId);

    /**
     * 根据标ID查询还款计划
     *
     * @param borrowId
     * @return
     */
    List<BorrowRepayment> getRepaymentByBorrowId(long borrowId);

    /**
     * 统计今日待还个数
     *
     * @return
     */
    int count();

    /**
     * 获取当前担保公司催收项目个数
     */
    int getUrgeCount(long userId);

    /**
     * 催收项目列表
     *
     * @param model
     * @return
     */
    PageDataList<BorrowRepaymentModel> getCollectionList(BorrowModel model);

    /**
     * 定时算逾期
     */
    void updateLateInterest(BorrowRepayment borrowRepayment);

    /**
     * 查找今日需要还款 还款列表
     */
    List<BorrowRepayment>  findTodayExpiresRepayments();

    /**
     * 根据ID获取BorrowRepayment对象
     *
     * @param id
     * @return
     */
    BorrowRepayment find(long id);

    /**
     * 逾期人数和金额
     *
     * @param date
     * @return
     */
    double[] getOverdueByDate(String date);

    /**
     * 逾期人数或金额
     *
     * @param type
     * @param date
     * @return
     */
    double getOverdueByTypeAndDate(int type, String date);

    /**
     * 根据投资时间获取借款人基本信息
     *
     * @param date
     * @return
     */
    int[] getOverdueInfoByDate(String date);

    /**
     * 根据投资时间获取借款人所在地分布
     *
     * @param date
     * @return
     */
    Object[][] getOverdueAreaDistributedByDate(String date);

    /**
     * 查找未还款或网站垫付的标
     */
    List<BorrowRepayment> findWaitRepay();

    /**
     * 获取所有待还总额
     *
     * @return
     */
    double getRemainderAccount();

}
